<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据类型</title>
</head>
<body>
<script>
    // JS的数据类型分为: 原始类型 与 引用类型
    // 1.原始类型: number string boolean undefined null
    // 1.1
    var a = 10;
    var b = 3.3;
    console.log(typeof a, typeof b);// 整数+小数=>number 数值类型

    var c = '测试文段1';
    var d = '测试文段2';
    console.log(typeof c, typeof d);// 单引号+双引号=>string 字符串类型[注意:string首字母小写]

    let e = true;
    let f = false;
    console.log(typeof e, typeof f);// boolean 布尔类型
    // 除此之外 剩余数据类型皆为引用类型

    // 1.2
    // 声明了类型但未赋值
    // 访问对象不存在的属性 访问数组不存在的下标
    let g;
    console.log(g, typeof g);// undefined `undefined` 未定义型


    // 2.引用类型: Object Array String Boolean Function Number...
    //2.1 定义JS对象
    let obj1 = {};// 准备好一个空对象 后续可以动态给对象赋值 等价于`new Object()`
    let obj2 = {
        // 属性名: 属性值 多对值之间使用逗号隔开
        name: '张三',
        age: 18
    }
    console.log(obj1);
    console.log(obj2);
    console.log(obj2.name, obj2.age);// 单独打点输出

    // 2.1.1 对象操作
    obj2.age = 20;// 更改对象属性值
    console.log(obj2);
    obj2.hobby = '睡觉';// 当前对象无该属性时 可以利用此格式声明并赋值
    console.log(obj2);
    console.log(obj2.gender);// 当尝试访问打印对象中不包含的属性时 显示 `undefined`


    // 3.JS数组
    // 虽然一个数组中可以存放不同类型的数据 但是不建议使用
    let arr =['老李','老王','老刘',1,1.2,false];
    console.log(arr);// 打印数组名可以直接打印出数组形式遍历数组元素
    console.log(arr[0]);// '老李'
    console.log(arr[5]);// false
    console.log(arr[99]);// 当尝试访问打印数组中不存在的元素时 显示 `undefined`
</script>
</body>
</html>